import { _decorator, Vec2 } from 'cc';

export class BezierUtils {
    /**
     * 计算贝塞尔曲线上的点
     * @param t 当前进度(0-1)
     * @param startPos 起始点
     * @param controlPos 控制点
     * @param endPos 终点
     * @returns 曲线上的位置
     */
    static getBezierPoint(t: number, startPos: Vec2, controlPos: Vec2, endPos: Vec2): Vec2 {

        const t1 = 1 - t;
        
        // 二次贝塞尔曲线公式
        const newX = t1 * t1 * startPos.x + 2 * t1 * t * controlPos.x + t * t * endPos.x;
        const newY = t1 * t1 * startPos.y + 2 * t1 * t * controlPos.y + t * t * endPos.y;
        
        return new Vec2(newX, newY);
    }

    static  moveAlongBezier(startPoint, controlPoint, endPoint, time, speed) {
        // 计算 t，time 控制时间进度
        let t = time * speed;
        if (t > 1) t = 1;  // t 最大为 1，确保动画结束时不会超出
    
        // 使用二次贝塞尔公式计算位置
        let x = (1 - t) * (1 - t) * startPoint.x + 2 * (1 - t) * t * controlPoint.x + t * t * endPoint.x;
        let y = (1 - t) * (1 - t) * startPoint.y + 2 * (1 - t) * t * controlPoint.y + t * t * endPoint.y;
    
        // 返回计算后的新位置
        return new Vec2(x, y);
    }
}


